//配置路由
import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes';
//引入store
import store from '@/store';

//使用插件
Vue.use(VueRouter);

//先把VueRouter原型对象的push保存一份
let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;
//重写push|replace 解决：NavigationDuplicated错误
//location：跳转路径
//resolve：成功的回调
//reject：失败的回调
VueRouter.prototype.push = function (location, resolve, reject) {
  if (resolve && reject) {
    //call|apply：相同点都可以篡改上下文一次
    //call传递参数多个参数 , 隔开 apply传递数组
    originPush.call(this, location, resolve, reject);
  } else {
    originPush.call(this, location, () => { }, () => { });
  }
}
VueRouter.prototype.replace = function (location, resolve, reject) {
  if (resolve && reject) {
    //call|apply：相同点都可以篡改上下文一次
    //call传递参数多个参数 , 隔开 apply传递数组
    originReplace.call(this, location, resolve, reject);
  } else {
    originReplace.call(this, location, () => { }, () => { });
  }
}
//配置路由
let router = new VueRouter({
  //配置路由：
  routes,//kv一致省略v
  //滚动行为，当进行路由跳转时候，让滚动条回到最顶部
  scrollBehavior(to, from, savedPosition) {
    //返回的y代表的是滚动条在最上方
    return { y: 0 }
  },
  //
  // base:'test'
})

// //全局守卫（前置守卫）在路由跳转之前判断是否可以进行跳转
router.beforeEach(async (to, from, next) => {
  //获取网站配置信息：   
  const siteConfig = sessionStorage.getItem('siteConfigKey');
  console.log("\n %c Inkexpress作者：何如意，欢迎访问： %c https://gitee.com/ruyi-he \n","color: #fadfa3; background: #030307; padding:5px 0;","background: #fadfa3; padding:5px 0;")
  if(!siteConfig)
  {
    try {
      //获取网站配置信息，
      await store.dispatch('site/getSite');
    } catch (error) {
      Vue.prototype.$message({
        type:'error',
        message:'获取网站配置信息失败请刷新页面！'
      })
    }
  } 
  //to:跳转到路由的信息
  //from:可以获取到你从哪个路由而来的信息
  //next() 放行 next(path)放行到指定路由 next(false)
  //获取用户登录的token
  let token = store.state.user.token
  //用户信息
  let name = store.state.user.userInfo.name;
  if (token) {
    //登录了还要去登录页面，直接放行到首页
    if (to.path == '/login') {
      next('/')//放行到首页
    }
    else {
      //登录了但是去的不是login      
      if (name) {
        next()
      } else {
        try {
          //没有用户信息，派发action，让仓库
          await store.dispatch('user/getUserInfo')
          next()
        } catch (error) {
          //获取用户信息失败（token失效）
          //1、清除state、token
          //2、放行到登录页面
          await store.dispatch('user/resetToken')
          next('/login')
        }
      }
    }
  }
  //用户未登录 
  else {
    //不能去某些页面
    let toPath = to.path
    if(toPath.indexOf('/xx') != -1 || toPath.indexOf('/xxx') != -1 || toPath.indexOf('/xxx') != -1)
    {
      //去往的是上面的页面，跳转到登录页面
      next('/login?redirect='+toPath)
    }else{
       //去的不是上面的页面，放行
      next()
    }
  }
})

 


export default router;

